package game;

import jw.gui.Color;
import jw.gui.View;
import jw.gui.Win;
import jw.gui.view.TextView;

/**
 * 宠物类
 */
public class Pet  implements View.Chick{

    /**
     * 显示宠物名称的宽度 高度，大小，可以设置为常量，不进行修改
     */
    final int textWidth = 100;
    final int textHeight = 50;
    final int textSize = 25;
    // 控件ID 用于判断区分点击事件
    final int eatID = 10000;
    final int runID = 10001;
    
    /**
     * 成员变量 名字 饥饿值
     */
    private String name;
    private int hungry = 100;

    /**
     * 成员变量 窗口对象 用于显示窗口内容
     */
    protected Win win;

    /**
     * 在窗口上显示宠物名字 饥饿值 所有宠物公用
     */
    private TextView nameText;
    private TextView hungryText;
    //界面包含的两个功能键
    private TextView eatFun,runFun;

    public Pet(Win win,String name)
    {
        this.win = win;
        this.name = name;

        //构造完对象后，对需要显示的资源进行初始化
        initGui();
    }

    /**
     * 私有方法 初始化窗口显示资源
     */
    private void initGui()
    {
        //显示宠物名 饥饿值
        nameText = new TextView(0, 0, textWidth*2, textHeight, "宠物名:"+getName());
        nameText.font().size(textSize);
        hungryText = new TextView(0, textHeight, textWidth*2, textHeight, "饥饿值:"+getHungry());
        hungryText.font().size(textSize);


        //显示 喂食 运动按键
        int x = (win.width()-textWidth*2-50)/2;
        eatFun = new TextView(x, 100, textWidth, textHeight, "喂养");
        eatFun.setBackground(Color.gold);
        eatFun.font().size(textSize);
        eatFun.id(eatID);
        eatFun.chick(this);

        runFun = new TextView(x+textWidth+50, 100, textWidth, textHeight, "运动");
        runFun.setBackground(Color.gold);
        runFun.font().size(textSize);
        runFun.id(runID);
        runFun.chick(this);
    }

    /**
     * 更新界面显示数据,宠物运动，喂食之后饥饿值会发生变更，需要加个方法让界面数据同步
     */
    private void update()
    {
        nameText.text("宠物名:"+getName());
        hungryText.text("饥饿值:"+getHungry());
    }

    /**
     * 宠物 运动方法，会给外部调用 修饰符为public 公有的
     * @return
     */
    public boolean run()
    {
        if(hungry<=20)
            return false;
        hungry -= 20;
        update();
        return true;
    }

    /**
     * 宠物喂食方法
     */
    public void eat()
    {
        hungry = 100;
        update();
    }

    /**
     * 为宠物命名
     * @param name
     */
    public void setName(String name){
        this.name = name;
    }

    /**
     * 获得宠物的名字
     * @return
     */
    public String getName()
    {
        return name;
    }

    /**
     * 获得宠物的饥饿值
     * @return
     */
    public int getHungry()
    {
        return hungry;
    }

    /**
     * 在窗体上显示宠物及信息
     * @param win
     */
    public void show()
    {
        win.add(nameText);
        win.add(hungryText);

        win.add(eatFun);
        win.add(runFun);
    }

    /**
     * 在窗体上隐藏宠物及信息
     * @param win
     */
    public void hide()
    {
        win.remove(nameText);
        win.remove(hungryText);

        win.remove(eatFun);
        win.remove(runFun);
    }

    /**
     * 点击接口的方法实现
     * @param object
     * @return
     */
    @Override
    public boolean onChick(View object) {
        // TODO Auto-generated method stub
        switch(object.id())
        {
            case eatID:
            eat();
            break;
            case runID:
            run();
            break;
        }

        return true;
    }  
}
